/**
 *
 *
 * @author TOTORO
 * @date 2021/7/11 17:54
 */

$(function () {

    /**
     * 选择设为默认地址的复选框
     */
    $("#setDefault").change(function () {
        var status = $(this).prop('checked')?1:0;
        // 因为状态是int类型，所以需要一个隐藏的input来传参
        $("#defaultAddress").val(status);
    })

    /**
     * 点击保存，进行表单验证并提交
     */
    $("#modify").click(function () {
        // 一系列的判断条件
        // 1、是否选择了地址
        var checkedArea = $(".cndzk-entrance-division-header-click-input").children("span").length >=1;
        // 2、是否按照格式填写了详细地址
        var isFillDetail = $(".cndzk-entrance-associate-area-textarea").val().length>=5 && $(".cndzk-entrance-associate-area-textarea").val().length<=120;
        // 3、收货人姓名是否填写正确
        var isFillFullName = $("#consignee").val().length > 0 && $("#consignee").val().length <= 25;
        // 4、手机号码格式
        var regex = /^1(?:3\d|4[4-9]|5[0-35-9]|6[67]|7[013-8]|8\d|9\d)\d{8}$/;
        var phoneIsOk = regex.test($("#phone").val());
        // 5、地址是否达到指定数量
        var achieveCount = parseInt($(".next-message-content").data("nowcount")) >= 20?true:false;

        if(!checkedArea){
            $("#areaError").text("请选择您的收货地址信息");
            $("#openArea").css("borderColor","#ff3000");
            return false;
        } else{
            $("#areaError").text("");
            $("#openArea").css("borderColor","#c4c6cf");
        }

        if(!isFillDetail){
            $("#detailError").text("详细地址长度需要在5-120个汉字或字符，不能包含表情符号");
            $("#detail-box").css("borderColor","#ff3000");
            return false;
        } else{
            $("#detailError").text("");
            $("#detail-box").css("borderColor","#c4c6cf");
        }

        if(!isFillFullName) {
            $("#fullNameError").text("收货人姓名长度需要在2-25个汉字或字符之间，不能包含特殊字符");
            $("#consignee-box").css("borderColor","#ff3000");
            return false;
        } else{
            $("#fullNameError").text("");
            $("#consignee-box").css("borderColor","#c4c6cf");
        }
        if(!phoneIsOk){
            $("#phoneError").text("手机号码格式不正确");
            $("#phone-box").css("borderColor","#ff3000");
            return false;
        } else{
            $("#phoneError").text("");
            $("#phone-box").css("borderColor","#c4c6cf");
        }

        // 如果是添加模式，才计算地址，否则修改模式不计算地址
        if($("#isUpdate").val() == "0") {
            if (achieveCount) {
                errorMsg = "你的地址已经满了！";
                $("#error").click();
                return false;
            }
        }

        var address = $("#address").val();
        var addressCode = $("#addressCode").val();
        var detail = $("#detail").val();
        var consignee = $("#consignee").val();
        var phone = $("#phone").val();
        var defaultAddress = $("#defaultAddress").val();

        // 通过url来判断是否有id ,修改才需要id
        var url = $("#url").val();
        var addressId = url=="/user_logic/insert_address.htm"?0:$("#id").val();

        $.ajax({
            type:"POST",
            url:url,
            async:false,
            data: {'id': addressId, 'address': address, 'addressCode': addressCode, 'detail': detail, 'consignee': consignee, 'phone': phone, 'defaultAddress': defaultAddress},
            success:function (html) {
                // 关闭该子页面
                $("#closeIframeAndRefresh",window.parent.document).click();
            }
        });
    });


//-------------------- 下面为 地区级联的具体处理 --------------------------------//

/**
 * 点击打开地区盒子，进行判断，生成新模板或对应地区的盒子
 */
$(".cndzk-entrance-division").on("click", ".cndzk-entrance-division-header-click", function () {
    var tipsSpan = $(".cndzk-entrance-division-header-click-input").children("span");
    if($(".cndzk-entrance-division-box").length>0){
        $(".cndzk-entrance-division-box").remove();
        return false;
    }
    var $box = generateDivision().appendTo(".cndzk-entrance-division");
    // 判断之前是否已经选择，选择到哪儿？
    // 如果是系统的提示，而不是选择的提示，则创建新模板 省级数据
    if($(".cndzk-entrance-division-header-click-input").children(":eq(0)").hasClass("placeholder")){
        // 生成省级数据
        generateProvince();
    } else{
        // 否则的话，根据最后一个Span的下标位置来判断省市县
        var index = $(".cndzk-entrance-division-header-click-input").children(":last-child").index();
        var nowCode = $(".cndzk-entrance-division-header-click-input").children(":last-child").data("value");
        // 如果最后一个市省级
        if(index == 0){
            generateCity(nowCode);
            // 改变选中状态
            $(".cndzk-entrance-division-box-title-level:eq(1)").addClass("active").siblings().removeClass("active");
        }
        // 如果最后一个是市级
        if(index == 1){
            // 将盒子的内容变为当前市级的
            generateArea(nowCode);
            // 改变选中状态
            $(".cndzk-entrance-division-box-title-level:eq(2)").addClass("active").siblings().removeClass("active");
        }
        // 如果最后一个是县级
        if(index == 2){
            // 将盒子的内容变为当前市级的
            generateArea(getParentCode(nowCode));
            // 改变选中状态
            $(".cndzk-entrance-division-box-title-level:eq(2)").addClass("active").siblings().removeClass("active");
            var areaCode = tipsSpan.eq(2).data("value");
            // 改变该地区的选择状态
            $(".cndzk-entrance-division-box-content-tag[data-value = "+areaCode+"]").addClass("active");
        }
    }
});


/**
 *  点击省市县标题li，切换当前对应的一级
 */
$(".cndzk-entrance-division").on("click", ".cndzk-entrance-division-box-title li", function () {
    // 当前选中的标题下标
    var index = $(this).index();
    // 提示选中地区的span标签
    var tipsSpan = $(".cndzk-entrance-division-header-click-input").children("span");
    var tipsLength = tipsSpan.length;
    // 如果用户并没有选择任何地区
    if(tipsLength < 1){
        return false;
    }

    // 如果点击省级标题
    if(index == 0){
        //清除之前的数据
        $(".cndzk-entrance-division-box").find(".cndzk-entrance-division-box-content div").html("");
        // 判断已选择的是否已经超越了省级，如果超越，才能选择
        // 生成省级数据
        generateProvince();
        // 获取已选择的省级code，改变为已选中状态
        var provinceCode = tipsSpan.eq(0).data("value");
        $(".cndzk-entrance-division-box-content-tag[data-value = "+provinceCode+"]").addClass("active");
        // 改变标题状态
        $(".cndzk-entrance-division-box-title-level:eq(0)").addClass("active").siblings().removeClass("active");
    }

    // 如果点击市级标题
    if(index == 1){
        if(tipsLength < 2){
            return false;
        }
        //清除之前的数据
        $(".cndzk-entrance-division-box").find(".cndzk-entrance-division-box-content div").html("");
        // 获取市级标题的code
        var cityCode = tipsSpan.eq(1).data("value");
        generateCity(getParentCode(cityCode));
        // 改变该地区为已选状态
        $(".cndzk-entrance-division-box-content-tag[data-value = "+cityCode+"]").addClass("active");
        // 改变标题状态
        $(".cndzk-entrance-division-box-title-level:eq(1)").addClass("active").siblings().removeClass("active");
    }

    // 如果点击县级标题
    if(index == 2){
        if(tipsLength < 3){
            return false;
        }
        //清除之前的数据
        $(".cndzk-entrance-division-box").find(".cndzk-entrance-division-box-content div").html("");
        var code = tipsSpan.eq(1).data("value");
        generateArea(code);
        var areaCode = tipsSpan.eq(2).data("value");
        // 改变该地区的选择状态
        $(".cndzk-entrance-division-box-content-tag[data-value = "+areaCode+"]").addClass("active");
        // 改变标题状态
        $(".cndzk-entrance-division-box-title-level:eq(2)").addClass("active").siblings().removeClass("active");
    }
});


/**
 *  点击盒子里的地区，分别展示出下一级的内容
 */
$(".cndzk-entrance-division").on("click", ".cndzk-entrance-division-box-content-tag", function () {
    // 获取点击li的编号和文本
    var nowCode = $(this).data("value"), nowText = $(this).text();
    // 再清除之前的
    $(".cndzk-entrance-division-box").find(".cndzk-entrance-division-box-content div").html("");
    // 判断是省市县的点击
    var type = $(".cndzk-entrance-division-box-title li.active").index();
    // 如果点击的是省
    if(type == 0){
        generateCity(nowCode);
        // 如果不存在，则添加一个新的
        if($(".cndzk-entrance-division-header-click-input").children("span").length < 1){
            var $tipsSpan = $("<span data-value='"+nowCode+"'><span class='cndzk-entrance-division-header-click-input-name'>"+nowText+"</span><span class='cndzk-entrance-division-header-click-input-symbol'>/</span></span>").appendTo($(".cndzk-entrance-division-header-click-input"));
            // 清除提示的P标签
            $(".cndzk-entrance-division-header-click-input p").remove();
        } else{
            // 存在，修改之前的，并删除省级之后的标签（更换了省，也应该更换市县）
            $(".cndzk-entrance-division-header-click-input").children(":eq(0)").prop("data-value", nowCode).children(":eq(0)").text(nowText);
            $(".cndzk-entrance-division-header-click-input").children(":eq(0)").nextAll().remove();
        }
        // 改变选中状态
        $(".cndzk-entrance-division-box-title-level:eq(1)").addClass("active").siblings().removeClass("active");
    }

    // 如果点击的是市
    if(type == 1){
        generateArea(nowCode);
        // 判断市级标题是否存在
        if($(".cndzk-entrance-division-header-click-input").children("span").length < 2){
            // 如果不存在，则添加一个新的
            var $tipsSpan = $("<span data-value='"+nowCode+"'><span class='cndzk-entrance-division-header-click-input-name'>"+nowText+"</span><span class='cndzk-entrance-division-header-click-input-symbol'>/</span></span>").appendTo($(".cndzk-entrance-division-header-click-input"));
        } else{
            // 更换原来的市级，删除市级之后的县级
            $(".cndzk-entrance-division-header-click-input").children(":eq(1)").prop("data-value", nowCode).children(":eq(0)").text(nowText);
            $(".cndzk-entrance-division-header-click-input").children(":eq(1)").nextAll().remove();
        }
        // 改变选中状态
        $(".cndzk-entrance-division-box-title-level:eq(2)").addClass("active").siblings().removeClass("active");
    }

    // 如果点击的是县
    if(type == 2){
        // 判断县级标题是否存在
        if($(".cndzk-entrance-division-header-click-input").children("span").length < 3){
            var $tipsSpan = $("<span data-value='"+nowCode+"'><span class='cndzk-entrance-division-header-click-input-name'>"+nowText+"</span></span>").appendTo($(".cndzk-entrance-division-header-click-input"));
        } else {
            $(".cndzk-entrance-division-header-click-input").children(":eq(2)").prop("data-value", nowCode).children().text(nowText);
        }
        $(".cndzk-entrance-division-box").remove();
    }

    // 获取选择完之后的标签，转换成一段字符串
    var tips = $(".cndzk-entrance-division-header-click-input").children("span");
    var address = "";
    var addressCode = "";
    for (let i = 0; i < tips.length; i++) {
        address+=tips.eq(i).children(":eq(0)").text()+" ";
        addressCode+=tips.eq(i).data("value")+" ";
    }
    address = address.substring(0, address.length-1);
    addressCode = addressCode.substring(0, addressCode.length-1);
    // 将数据渲染在隐藏输入框上
    $("#address").val(address);
    $("#addressCode").val(addressCode);
})


});



/**
 * 生成地区盒子
 * @returns {*|Window.jQuery|HTMLElement}
 */
function generateDivision() {
    var box = $("<div class='cndzk-entrance-division-box'>\n" +
        "<ul class='cndzk-entrance-division-box-title'>\n" +
        "<li class='cndzk-entrance-division-box-title-level active' style='width: 33.4%;'>省</li>\n" +
        "<li class='cndzk-entrance-division-box-title-level ' style='width: 33.4%;'>市</li>\n" +
        "<li class='cndzk-entrance-division-box-title-level ' style='width: 33.4%;'>区</li>\n" +
        "</ul>\n" +
        "<ul class='cndzk-entrance-division-box-content'>\n" +
        "<div>\n" +
        "</div>\n" +
        "</ul>\n" +
        "</div>");
    return box;
}

/**
 * 生成省级
 */
function generateProvince() {
    $.ajaxSettings.async = false;
    // 循环第一个省级标签
    $.get("/static/json/city_code.json", function (data) {
        for (let i = 0; i < data.length; i++) {
            var name="";
            // 如果有这个属性，就继续判断
            if(data[i].hasOwnProperty("city")) {
                if ("市辖区" == data[i].city[0].name + "") {
                    name = data[i].name.substring(0, (data[i].name.length - 1));
                    isY = true;
                } else {
                    isY = false;
                }
            }
            if(!isY) {
                name = data[i].name;
            }
            $(".cndzk-entrance-division-box").find(".cndzk-entrance-division-box-content").find("div").append("<li class='cndzk-entrance-division-box-content-tag ' data-value = "+ data[i].code+ ">"+name+"</li>");
        }
    });
    $.ajaxSettings.async = true;
}

/**
 * 生成市级
 * @param nowCode
 */
function generateCity(nowCode) {
    $.ajaxSettings.async = false;
    $.get("/static/json/city_code.json", function (data) {
        var name = "";
        for (let i = 0; i < data.length; i++) {
            // 如果ID和选择的ID一样
            if(data[i].code == nowCode){
                // 如果拥有city属性，才继续
                if(data[i].hasOwnProperty("city")) {
                    // 如果是直辖区，那就保持之前的
                    if ("市辖区" == data[i].city[0].name + "") {
                        // 直接填充data[i].name
                        $(".cndzk-entrance-division-box").find(".cndzk-entrance-division-box-content div").append("<li class='cndzk-entrance-division-box-content-tag' data-value = "+data[i].city[0].code+">"+data[i].name+"</li>");
                        // cityCode = data[i].city[0].code;
                    } else{
                        // 循环填充
                        for (let j = 0; j < data[i].city.length; j++) {
                            $(".cndzk-entrance-division-box").find(".cndzk-entrance-division-box-content div").append("<li class='cndzk-entrance-division-box-content-tag' data-value = "+data[i].city[j].code+">"+data[i].city[j].name+"</li>");
                            // 获取市级区的第一个，自动填充县级区
                            // cityCode = data[i].city[0].code;
                        }
                    }
                }
            }
        }
    });
    $.ajaxSettings.async = true;
}

/**
 * 生成县级
 * @param nowCode
 */
function generateArea(nowCode) {
    $.ajaxSettings.async = false;
    $.get("/static/json/city_code.json", function (data) {
        for (let i = 0; i < data.length; i++) {
            if(data[i].hasOwnProperty("city")) {
                for (let j = 0; j < data[i].city.length; j++) {
                    if(nowCode == data[i].city[j].code){
                        for (let k = 0; k < data[i].city[j].area.length; k++) {
                            // 如果是市辖区，不会填充
                            if(data[i].city[j].area[k].name == "市辖区"){
                                continue;
                            }
                            // 填充
                            $(".cndzk-entrance-division-box").find(".cndzk-entrance-division-box-content div").append("<li class='cndzk-entrance-division-box-content-tag ' data-value = "+data[i].city[j].area[k].code+">"+data[i].city[j].area[k].name+"</li>");
                        }
                    }
                }
            }
        }
    });
    $.ajaxSettings.async = true;
}

/**
 * 根据地区iD获取这个地区的父级地区id
 * @param nowCode
 * @returns {number}
 */
function getParentCode(nowCode) {
    var code;
    $.ajaxSettings.async = false;
    $.get("/static/json/city_code.json", function (data) {
        for (let i = 0; i < data.length; i++) {
            if(nowCode == data[i]['code']){
                code = data[i]['code'];
                break;
            }
            if(data[i].hasOwnProperty("city")){
                for (let j = 0; j < data[i]['city'].length; j++) {
                    if (nowCode == data[i]['city'][j]['code']) {
                        code = data[i]['code'];
                        break;
                    }
                    for (let k = 0; k < data[i]['city'][j]['area'].length; k++) {
                        if (nowCode == data[i]['city'][j]['area'][k]['code']) {
                            code = data[i]['city'][j]['code'];
                            break;
                        }
                    }
                }
            }
        }
    });
    return code;
}